home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / drdobbs / ddjcompr / hstest / lib / dosalloc.c < prev    next >
C/C++ Source or Header  |  1989-09-01  |  1KB  |  59 lines

  1. /*
  2. **  int segment  = dosalloc(long bufferlength)
  3. **  int ok       = dosfree(segment)
  4. */
  5.  
  6.  
  7. #include <dos.h>
  8.  
  9. /*
  10. ** allocate a new buffer for (long) bufflen bytes
  11. ** return -1 if not success
  12. ** else return bufferdescriptor (int)
  13. */
  14.  
  15. void far * dosalloc(long);
  16. int        dosfree(void far *);
  17.  
  18. void far *dosalloc(length)
  19. long length;
  20.     {
  21.     union REGS ir;
  22.     ir.x.ax = 0x4800;
  23.     ir.x.bx = (length+15)>>4;
  24.     intdos(&ir, &ir);
  25.     if (ir.x.ax < 10)                   /* fehlermeldungen : eigentlich CARRY */
  26.         return 0;
  27.     return (void far *)((long)ir.x.ax<<16);
  28.     }
  29.  
  30. void far *dosrealloc(seg,length)
  31. long length;
  32. void far *seg;
  33.     {
  34.     union REGS ir;
  35.     struct SREGS sr;
  36.     ir.x.ax = 0x4a00;
  37.     ir.x.bx = (length+15)>>4;
  38.     sr.es = FP_SEG(seg);
  39.  
  40.     intdosx( &ir, &ir, &sr);
  41.     if (ir.x.ax < 10)                   /* fehlermeldungen : eigentlich CARRY */
  42.         return 0;
  43.     return (void far *)((long)ir.x.ax<<16);
  44.     }
  45.  
  46.  
  47. int dosfree(seg)
  48. void far *seg;
  49.     {
  50.     union REGS ir;
  51.     struct SREGS sr;
  52.     ir.x.ax = 0x4900;
  53.     sr.es = FP_SEG(seg);
  54.  
  55.     intdosx( &ir, &ir, &sr);
  56.  
  57.     return ir.x.ax;
  58.     }
  59.